package srv;
import java.util.ArrayList;
import java.util.List;

import dao.HibernateClienteBeanDAO;
import entities.*;
import beans.*;

public class ClienteSRV 
{
	private static HibernateClienteBeanDAO dao;
	private static ClienteSRV instancia;
	
	static 
	{
		dao = HibernateClienteBeanDAO.getInstancia();
	}
	
	public static ClienteSRV getInstancia()
	{
		if (instancia == null)
		{
			instancia = new ClienteSRV();
		}
		return instancia;
	}
	
	public ClienteEntity pasadoDesdeBean(ClienteBean clienteBean) 
	{
		ClienteEntity cliente = new ClienteEntity();
		
		List<CondicionVentaBean> condicionesDeVentaBean = clienteBean.getCondicionesDeVenta();
		List<CondicionVentaEntity> condicionesDeVentaEntity = new ArrayList<CondicionVentaEntity>();
		for( CondicionVentaBean cv : condicionesDeVentaBean )
		{
			CondicionVentaEntity cve = new CondicionVentaEntity();
			cve.setDescuento(cv.getDescuento());
			cve.setDiasFinanciacion(cv.getDiasFinanciacion());
			cve.setRecargo(cv.getRecargo());
			cve.setTipo(cv.getTipo());
			
			condicionesDeVentaEntity.add(cve);
		}
		cliente.setCondicionesDeVenta(condicionesDeVentaEntity);
		
		cliente.setCuit( clienteBean.getCuit());
		cliente.setDescuento(clienteBean.getDescuento());
		
		DireccionEntity direccion = DireccionSRV.getInstancia().pasadoDesdeBean(clienteBean.getDireccion());
		cliente.setDireccion(  direccion );
		
		cliente.setId( clienteBean.getId());
		cliente.setIngresosBrutos( clienteBean.getIngresosBrutos());
		cliente.setInicioActividades( clienteBean.getInicioActividades());
		cliente.setIvaResponsableInscriptoPorDefecto( clienteBean.isIvaResponsableInscriptoPorDefecto() );
		cliente.setRazonSocial( clienteBean.getNombreEmpresa());
		
		/*
		OficinaVentaEntity sucursal = OficinaVentaSRV.getInstancia().pasadoDesdeBean( clienteBean.getSucursal());
		cliente.setSucursal( sucursal );
		*/
		cliente.setTipoDeFacturaPorDefecto( clienteBean.getTipoDeFacturaPorDefecto());
		
		return cliente;
	}
	
	public ClienteBean pasadoDesdeEntity(ClienteEntity clienteEntity) 
	{
		ClienteBean cliente = new ClienteBean();
		
		List<CondicionVentaBean> condicionesDeVenta = (List<CondicionVentaBean>)cliente.getCondicionesDeVenta();
		cliente.setCondicionesDeVenta(condicionesDeVenta);
		cliente.setCuit( clienteEntity.getCuit());
		cliente.setDescuento(clienteEntity.getDescuento());
		
		DireccionBean direccion = DireccionSRV.getInstancia().pasadoDesdeEntity(clienteEntity.getDireccion());
		cliente.setDireccion(  direccion );
		
		cliente.setId( clienteEntity.getId());
		cliente.setIngresosBrutos( clienteEntity.getIngresosBrutos());
		cliente.setInicioActividades( clienteEntity.getInicioActividades());
		cliente.setIvaResponsableInscriptoPorDefecto( clienteEntity.isIvaResponsableInscriptoPorDefecto() );
		cliente.setNombreEmpresa( clienteEntity.getRazonSocial());
		
		/*
		OficinaVentaBean sucursal = OficinaVentaSRV.getInstancia().pasadoDesdeEntity( clienteEntity.getSucursal());
		cliente.setSucursal( sucursal );
		*/
		cliente.setTipoDeFacturaPorDefecto( clienteEntity.getTipoDeFacturaPorDefecto());
		
		return cliente;
	}
	
	public void grabarCliente(ClienteBean cliente)
	{
		ClienteEntity cl = this.pasadoDesdeBean(cliente);
		dao.grabarCliente(cl);
	}
	
	public void eliminarCliente( ClienteBean cliente )
	{
		ClienteEntity cl = this.pasadoDesdeBean(cliente);
		dao.eliminarCliente( cl );
	}
	
	public void modificarCliente( ClienteBean cliente )
	{
		ClienteEntity cl = this.pasadoDesdeBean(cliente);
		dao.modificarCliente( cl );
	}
	
	public ClienteBean obtenerClientePorCUIT( String CUIT )
	{
		ClienteEntity cliente = dao.obtenerClientePorCUIT( CUIT );
		ClienteBean cl = this.pasadoDesdeEntity(cliente);
		return cl;	
	}
}
